/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;

import com.comac.ins.isfd.constant.enums.IsfdBusinessDatabaseTypeEnum;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseModelTreeBo;
import com.comac.ins.isfd.domain.vo.IsfdDatabaseModelTreeShowVo;
import com.comac.ins.isfd.domain.vo.IsfdDatabaseModelTreeVo;

/**
 * 要素库模型层级管理Service接口
 *
 * @author Lion Li
 * @date 2025-01-09
 */
public interface IIsfdDatabaseModelTreeService {

    IsfdDatabaseModelTreeShowVo getTree(Integer rootModelOnly);

    /**
     * 根据业务信息查询模型树
     * 根据 要素库类型id-业务场景id-业务系统id 查询所有 最新版本的普通模型以及子模型 树结构返回
     * 要素库类型id-业务场景id 查询所有 最新版本的的通用模型以及子模型 树结构返回
     */
    IsfdDatabaseModelTreeShowVo getTreeByBusinessId(Long databaseTypeId, Long sceneId, Long systemId, Integer rootModelOnly);

    Boolean save(IsfdDatabaseModelTreeBo bo);

    Boolean deleteById(Long id);

    IsfdDatabaseModelTreeVo queryByUniqueKey(String uniqueKey);

    /**
     * 判断 业务节点是否已经存在 和模型已经关联
     */
    void checkIfNodeExist(IsfdBusinessDatabaseTypeEnum isfdBusinessDatabaseTypeEnum, Long businessId, String name);
}
